home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / XKit / xutils.py < prev   
Text File  |  2008-12-26  |  8KB  |  194 lines

  1. #       xutils.py -- Enhanced class of X-Kit's parser
  2. #       
  3. #       Copyright 2008 Alberto Milone <albertomilone@alice.it>
  4. #       
  5. #       This program is free software; you can redistribute it and/or modify
  6. #       it under the terms of the GNU General Public License as published by
  7. #       the Free Software Foundation; either version 2 of the License, or
  8. #       (at your option) any later version.
  9. #       
  10. #       This program is distributed in the hope that it will be useful,
  11. #       but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #       GNU General Public License for more details.
  14. #       
  15. #       You should have received a copy of the GNU General Public License
  16. #       along with this program; if not, write to the Free Software
  17. #       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  18. #       MA 02110-1301, USA.
  19.  
  20. from xorgparser import *
  21. import sys
  22.  
  23. class XUtils(Parser):
  24.     '''
  25.     Subclass with higher-level methods
  26.     
  27.     See xorgparser.Parser for the low-level methods
  28.     '''
  29.     def __init__(self, source=None):
  30.         Parser.__init__(self, source)
  31.     
  32.     def checkNFixSection(self):
  33.         '''
  34.         Gathers information on one or more sections and try to fix 
  35.         broken references to other sections.
  36.         '''
  37.         brokenReferences = self.getBrokenReferences()
  38.         for section in brokenReferences:
  39.             for reference in brokenReferences[section]:
  40.                 self.makeSection(section, identifier=reference)
  41.      
  42.     def getDriver(self, section, position):
  43.         '''
  44.         Get the driver in use in a section. If none is found it will return
  45.         false.
  46.         
  47.         For further information see getValue
  48.         '''
  49.         option = 'Driver'
  50.         return self.getValue(section, option, position)
  51.         
  52.     def setDriver(self, section, driver, position):
  53.         '''
  54.         Set the driver in use in a section.
  55.         '''
  56.         option = 'Driver'
  57.         self.addOption(section, option, driver, position=position)
  58.  
  59.  
  60.  
  61.     def isDriverInSection(self, driver, sectionsList=None):
  62.         '''
  63.         Look for the driver in the Device sections.
  64.         Return True if the driver is found, otherwise return False. 
  65.         
  66.         if sectionsList == None check all the Device sections
  67.         '''
  68.         if sectionsList == None:
  69.             sectionsList = self.globaldict['Device'].keys()
  70.         
  71.         for section in sectionsList:
  72.             try:
  73.                 if self.getDriver('Device', section) == driver:
  74.                     return True
  75.             except OptionException:
  76.                 #no references to the Device section
  77.                 pass
  78.         return False
  79.     
  80.     def getDevicesFromServerLayout(self, position):
  81.         '''
  82.         Look for references to Device sections in the Screen sections referred
  83.         to in the ServerLayout[position] section.
  84.         
  85.         Return a list of references to the relevant Device sections
  86.         '''
  87.         devicesToCheck = []
  88.         references = self.getReferences('ServerLayout', position, ['Screen'])
  89.         if len(references['Screen']) > 0:
  90.             '''
  91.             Check all the device sections related to these Screen sections
  92.             
  93.             references will look like {'Screen': ['Screen1', '0']}
  94.             '''
  95.             for reference in references['Screen']:
  96.                 try:
  97.                     screenPosition = self.getPosition('Screen', reference)#reference[1]
  98.                 except IdentifierException:
  99.                     continue
  100.                 '''
  101.                 get references to the Device sections in the Screen sections
  102.                 '''
  103.                 try:
  104.                     deviceReferences = self.getReferences('Screen', screenPosition, ['Device'])
  105.                     for device in deviceReferences['Device']:
  106.                         devicePosition = self.getPosition('Device', device)#device[1]
  107.                         devicesToCheck.append(devicePosition)
  108.                 except OptionException:#no references to the Device section
  109.                     pass
  110.         return devicesToCheck
  111.     
  112.     def getDevicesInUse(self):
  113.         '''
  114.         If possible, return only the Device sections in use, otherwise return
  115.         all the Device sections.
  116.         
  117.         This method supports old Xinerama setups and therefore looks for
  118.         references to Device sections in the ServerLayout section(s) and checks
  119.         only the default ServerLayout section provided than one is set in the
  120.         ServerFlags section.
  121.         '''
  122.         devicesToCheck = []
  123.         driverEnabled = False
  124.         
  125.         serverLayout = self.globaldict['ServerLayout']
  126.         serverFlags = self.globaldict['ServerFlags']
  127.         serverLayoutLength = len(serverLayout)
  128.         serverFlagsLength = len(serverFlags)
  129.         
  130.         if serverLayoutLength > 0:
  131.             if serverLayoutLength > 1:#More than 1 ServerLayout?
  132.                 if serverFlagsLength > 0:#has ServerFlags
  133.                     '''
  134.                     If the ServerFlags section exists there is a chance that
  135.                     a default ServerLayout is set.
  136.                     
  137.                     If no ServerLayout is set, this might be intentional since
  138.                     the user might start X with the -layout command line option.
  139.                     '''
  140.                     
  141.                     #See if it has a default ServerLayout
  142.                     default = self.getDefaultServerLayout()
  143.                     
  144.                     if len(default) == 1:
  145.                         devicesToCheck = self.getDevicesFromServerLayout(default[0])
  146.                     else:
  147.                         for layout in serverLayout:
  148.                             devicesToCheck += self.getDevicesFromServerLayout(layout)
  149.                 else:
  150.                     for layout in serverLayout:
  151.                         devicesToCheck += self.getDevicesFromServerLayout(layout)
  152.             else:
  153.                 devicesToCheck = self.getDevicesFromServerLayout(0)
  154.         #print 'devicesToCheck', devicesToCheck
  155.         
  156.         if len(devicesToCheck) == 0:
  157.             #Check all the Device sections
  158.             devicesToCheck = self.globaldict['Device'].keys()
  159.         
  160.         return devicesToCheck
  161.     
  162.     def isDriverEnabled(self, driver):
  163.         '''
  164.         If possible, check only the Device sections in use, otherwise check
  165.         all the Device sections and see if a driver is enabled.
  166.         
  167.         This method supports old Xinerama setups and therefore looks for
  168.         references to Device sections in the ServerLayout section(s) and checks
  169.         only the default ServerLayout section provided than one is set in the
  170.         ServerFlags section.
  171.         '''
  172.         devicesToCheck = self.getDevicesInUse()
  173.         driverEnabled = self.isDriverInSection(driver, sectionsList=devicesToCheck)
  174.         
  175.         return driverEnabled#driverEnabled, devicesToCheck)
  176.             
  177.     def getScreenDeviceRelationships(self):
  178.         '''
  179.         See which Screen sections are related to which Device sections
  180.         '''
  181.         relationships = {}
  182.         it = 0
  183.         for screen in self.globaldict['Screen']:
  184.             references = self.getReferences('Screen', it, reflist=['Device'])
  185.             device = references['Device'][0]
  186.             device = self.getPosition('Device', device)
  187.             relationships.setdefault(device)
  188.             relationships[device] = {}
  189.             relationships[device]['Screen'] = it
  190.             it += 1
  191.         
  192.         return relationships
  193.  
  194.